Cross-Account Role
GPT-4.icon
あるAWSアカウントのIAMユーザーやサービスが、別のAWSアカウントのリソースにアクセスできるようにする仕組み 🔧 どういうときに使う?
たとえば、次のようなケースです:
複数のAWSアカウントでインフラを分離している(例:開発用アカウントと本番用アカウント)
管理用アカウントから、各プロダクトアカウントのCloudWatch Logsを見たい
セキュリティ監査用アカウントから、他アカウントのS3バケットを読みたい
🧭 基本の考え方
1. **信頼する側(リソースを持つアカウント)**が、**信頼される側(アクセスしたいIAMユーザーやサービスがいるアカウント)**に向けて「ロール」を用意します。
2. ロールには、「このIAMユーザー/ロールならAssume Role(引き受け)していいよ」とIAMポリシーが設定されます。
🔐 具体例
前提:
アカウントA(開発用): 111111111111
アカウントB(本番用): 222222222222
アカウントB(本番側)の設定
1. ロール作成(例: DevAccessRole)
アカウントAからのアクセスを許可する。
code:json
// Trust Policy(ロールに付ける)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:root"
},
"Action": "sts:AssumeRole"
}
]
}
2. アクセス権限ポリシー(例: S3読み取り)
code:json
// Role Policy(ロールに付ける)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-prod-bucket/*"
}
]
}
🤝 アカウントA(開発側)での使い方
code:bash
aws sts assume-role \
--role-arn arn:aws:iam::222222222222:role/DevAccessRole \
--role-session-name mySession
このコマンドで得られる一時クレデンシャルを使って、アカウントBのS3にアクセスできるようになります。